package org.groupg.mockdatabyspring.morkdata.model.abstracts;

import lombok.extern.slf4j.Slf4j;
import org.groupg.mockdatabyspring.system.exceptions.CheckException;

import java.io.IOException;

/**
 * 创建文件的抽象类，每一个需要生成文件内容的示例对象，都应该继承该抽象类，并完成抽象方法
 */
@Slf4j
public abstract class CreateFileAbstract {

    /**
     * 执行的过程，后续需要额外添加步骤可以在这里进行
     *
     * @throws IOException    针对IO流的异常内容 来源于 {@link CreateFileAbstract#createFile()}
     * @throws CheckException 针对检查未通过的异常 来源于 {@link CreateFileAbstract#check()}
     */
    public void execute() throws IOException, CheckException {
        log.debug("执行创建文件任务开始");
        boolean b = check();
        if (b) {
            log.debug("校验通过，进行创建文件！");
            createFile();
        } else {
            log.debug("校验未通过，跳过本次内容");
            throw new IOException("校验未通过");
        }

    }

    /**
     * 检查用的方法，需要自己实现
     *
     * @return 是否正常
     * @throws CheckException 针对检查未通过的异常
     */
    public abstract boolean check() throws CheckException;

    /**
     * 创建文件的方法，需要实现。
     *
     * @throws IOException 针对IO流的异常内容
     */
    public abstract void createFile() throws IOException;
}
